package com.loong.web.suppert.collection.valid;

import java.lang.reflect.Field;

import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;

import com.loong.web.suppert.collection.valid.ErrorList.ErrorInfo;

/**
 * 校验器封装
 * 
 * @author 张成轩
 */
public class ValidAdapter {

	/**
	 * @param param 参数
	 * @param errorList 错误集合
	 * @param valid 校验器
	 */
	public static void convert(Object param, ErrorList errorList, BindingResult valid) {

		if (errorList.hasError())
			for (ErrorInfo error : errorList.getErrors())
				convert(param, error, valid);
	}

	/**
	 * @param param 参数
	 * @param error 错误信息
	 * @param valid 校验器
	 */
	public static void convert(Object param, ErrorInfo error, BindingResult valid) {

		String paramName = param.getClass().getSimpleName();
		ObjectError valid_error;
		if (error.getField() == null)
			// 字段错误
			valid_error = new ObjectError(paramName, error.getError());
		else
			try {
				Field field = param.getClass().getDeclaredField(error.getField());
				field.setAccessible(true);
				Object value = field.get(param);
				// 通用错误
				valid_error = new FieldError(paramName, error.getField(), value, false, null, null, error.getError());
			} catch (SecurityException | NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {
				// 字段错误
				valid_error = new ObjectError(paramName, error.getError());
			}
		valid.addError(valid_error);
	}
}
